package main

type CQueue struct {
	OutStack []int
	InStack  []int
}

//用两个栈实现一个队列。队列的声明如下，请实现它的两个函数 appendTail 和 deleteHead ，分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素，deleteHead 操作返回 -1 )
//
//来源：力扣（LeetCode）
//链接：https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

func Constructor() CQueue {
	return CQueue{}
}

func (this *CQueue) AppendTail(value int) {
	this.InStack = append(this.InStack, value)
}

func (this *CQueue) DeleteHead() int {
	if len(this.OutStack) == 0 {
		if len(this.InStack) == 0 {
			return -1
		}
		this.OutOfInstack()
	}
	value := this.OutStack[len(this.OutStack)-1]
	this.OutStack = this.OutStack[:len(this.OutStack)-1]
	return value
}

func (this *CQueue) OutOfInstack() {
	for len(this.InStack) > 0 {
		this.OutStack = append(this.OutStack, this.InStack[len(this.InStack)-1])
		this.InStack = this.InStack[:len(this.InStack)-1]
	}
}
